import http from './http';
import { message } from 'ant-design-vue';

/**
 * 图片上传工具函数
 * 
 * @param {File} file - 要上传的图片文件
 * @returns {Promise<string>} - 返回上传成功后的图片URL
 */
export const uploadImage = async ({file}) => {
  // 检查文件类型
  console.log(file);
  const isImage = file.type.startsWith('image/');
  if (!isImage) {
    message.error('只能上传图片文件!');
    return Promise.reject('只能上传图片文件');
  }

  // 检查文件大小，限制为10MB
  const isLt10M = file.size / 1024 / 1024 < 10;
  if (!isLt10M) {
    message.error('图片大小不能超过10MB!');
    return Promise.reject('图片大小不能超过10MB');
  }

  // 创建FormData对象
  const formData = new FormData();
  formData.append('image', file);

  try {
    // 发送上传请求
    const response = await http.post('/api/upload', formData, {
      headers: {
        'Content-Type': 'multipart/form-data'
      }
    });
    
    // 返回图片URL
    if (response && response.data) {
      return response.data;
    } else {
      message.error('上传失败，请重试');
      return Promise.reject('上传失败');
    }
  } catch (error) {
    message.error('图片上传失败: ' + (error.message || '未知错误'));
    return Promise.reject(error);
  }
};

/**
 * 在表单中使用的图片上传前检查函数
 * 可用于 Ant Design 的 Upload 组件的 beforeUpload 属性
 * 
 * @param {File} file - 要上传的文件
 * @returns {boolean | Promise<File>} - 返回是否通过检查
 */
export const beforeImageUpload = (file) => {
  const isImage = file.type.startsWith('image/');
  if (!isImage) {
    message.error('只能上传图片文件!');
    return false;
  }
  
  const isLt5M = file.size / 1024 / 1024 < 10;
  if (!isLt5M) {
    message.error('图片大小不能超过10MB!');
    return false;
  }
  
  return true;
};

/**
 * 获取文件的Base64编码，用于预览
 * 
 * @param {File} file - 文件对象
 * @returns {Promise<string>} - 返回文件的Base64编码
 */
export const getBase64 = (file) => {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = (error) => reject(error);
  });
};
